#include <stdio.h>
#include <stdlib.h>
#include <xlist.h>

/*@num:获取总人数
 *@n:控制报数的大小
 *
 */
int get_number(list_st *);

void joseph(list_st **ptr,int n)
{
	list_st *p = *ptr;
	list_st *cur = NULL;
	int num,k = 1;
	num = get_number(*ptr);
/*控制循环条件，到只剩一人停止
 *@cur:拿到被kill的人的下一个人的地址
 */
	while(num != 1)
	{
		if(k == n)
		{
			cur = p->next;
			printf("%d ",p->data);
			//当删除的点为第一个时，给链表新的指向
			*ptr = list_delete(*ptr,&(p->data));
			p = cur;	
			k = 1;
			num--;
		}
		else
		{
			k++;
			p = p->next;
		}	
	}

}


int get_number(list_st *ptr)
{
	int num = 0;
	list_st *p = ptr;
	do
	{
		num++;
		p = p->next;
	}while(p != ptr);
	return num;
}

int main()
{
	list_st *list = NULL;
	list_create(&list);

	joseph(&list,4);
	printf("\n");
	list_display(list);
	list_destroy(list);

	exit(0);
}
